//
//  STAdmobProtocol.swift
//  iPhone
//
//  Created by Toj on 4/11/23.
//

///*
// * 广告加载规范协议
// */
//protocol STAdmobProtocol: NSObjectProtocol {
//    
//    /* 广告对象 */ 
//    associatedtype AdObject
//    
//    /* app启动 预加载 缓存的广告 */
//    func launchPreloadCacheAd()
//    
//    /* 预加载 广告对象 */
//    func preloadCacheAd(admobModel: STAdmobModel)
//    
//    /* 更新预加载 广告数据 并且预加载 广告对象 */
//    func replacePreloadCacheAd(admobModel: STAdmobModel)
//  
//    /*
//     * 预加载 广告对象,
//     * 有预加载 广告对象: 待展示
//     * 无预加载 广告对象: 加载 广告对象, 加载完后缓存广告对象 待展示
//     */
//    func preloadAd(admobModel: STAdmobModel, completion: ((_ isSuccess: Bool)->Void)?)
//    
//    /* 加载新广告对象 */
//    func loadAd(admobModel: STAdmobModel, completion: ((_ isSuccess: Bool)->Void)?)
//    
//    /* 展示 广告对象 */
//    func presentAd(from vc: UIViewController)
//}
//
//class STAdsObject<T: STAdmobProtocol>: NSObject {
//    var object: T?
//    /* app启动 预加载 缓存的广告 */
//    func launchPreloadCacheAd() {
//        object?.launchPreloadCacheAd()
//    }
//    
//    /* 预加载 广告对象 */
//    func preloadCacheAd(admobModel: STAdmobModel) {
//        object?.preloadCacheAd(admobModel: admobModel)
//    }
//    
//    /* 更新预加载 广告数据 并且预加载 广告对象 */
//    func replacePreloadCacheAd(admobModel: STAdmobModel) {
//        object?.replacePreloadCacheAd(admobModel: admobModel)
//    }
//  
//    /*
//     * 预加载 广告对象,
//     * 有预加载 广告对象: 待展示
//     * 无预加载 广告对象: 加载 广告对象, 加载完后缓存广告对象 待展示
//     */
//    func preloadAd(admobModel: STAdmobModel, completion: ((_ isSuccess: Bool)->Void)?) {
//        object?.preloadAd(admobModel: admobModel, completion: completion)
//    }
//    
//    /* 加载新广告对象 */
//    func loadAd(admobModel: STAdmobModel, completion: ((_ isSuccess: Bool)->Void)?) {
//        object?.loadAd(admobModel: admobModel, completion: completion)
//    }
//    
//    /* 展示 广告对象 */
//    func presentAd(from vc: UIViewController) {
//        object?.presentAd(from: vc)
//    }
//}
//
//class STBaseAdsObject: NSObject { }
//
//class STNativeAdsObject: STBaseAdsObject { }
//extension STNativeAdsObject: STAdmobProtocol {
//    /* 广告对象 */
//    typealias AdObject = NSObject
//    
//    /* app启动 预加载 缓存的广告 */
//    func launchPreloadCacheAd() { }
//    
//    /* 预加载 广告对象 */
//    func preloadCacheAd(admobModel: STAdmobModel) { }
//    
//    /* 更新预加载 广告数据 并且预加载 广告对象 */
//    func replacePreloadCacheAd(admobModel: STAdmobModel) { }
//  
//    /*
//     * 预加载 广告对象,
//     * 有预加载 广告对象: 待展示
//     * 无预加载 广告对象: 加载 广告对象, 加载完后缓存广告对象 待展示
//     */
//    func preloadAd(admobModel: STAdmobModel, completion: ((_ isSuccess: Bool)->Void)?) { }
//    
//    /* 加载新广告对象 */
//    func loadAd(admobModel: STAdmobModel, completion: ((_ isSuccess: Bool)->Void)?) { }
//    
//    /* 展示 广告对象 */
//    func presentAd(from vc: UIViewController) { }
//}
//
//
//class STNativeAdsObject2: STBaseAdsObject { }
//extension STNativeAdsObject2: STAdmobProtocol {
//    /* 广告对象 */
//    typealias AdObject = NSObject
//    
//    /* app启动 预加载 缓存的广告 */
//    func launchPreloadCacheAd() { }
//    
//    /* 预加载 广告对象 */
//    func preloadCacheAd(admobModel: STAdmobModel) { }
//    
//    /* 更新预加载 广告数据 并且预加载 广告对象 */
//    func replacePreloadCacheAd(admobModel: STAdmobModel) { }
//  
//    /*
//     * 预加载 广告对象,
//     * 有预加载 广告对象: 待展示
//     * 无预加载 广告对象: 加载 广告对象, 加载完后缓存广告对象 待展示
//     */
//    func preloadAd(admobModel: STAdmobModel, completion: ((_ isSuccess: Bool)->Void)?) { }
//    
//    /* 加载新广告对象 */
//    func loadAd(admobModel: STAdmobModel, completion: ((_ isSuccess: Bool)->Void)?) { }
//    
//    /* 展示 广告对象 */
//    func presentAd(from vc: UIViewController) { }
//}
//
//class STAdsManager: NSObject {
//    static let manager = STAdsManager()
//    
//    private lazy var mapTable: [String: STAdsObject<STBaseAdsObject>] = {
//        let appOpen =  STAdsObject<STNativeAdsObject>()
//        let appOpen2 = STAdsObject<STNativeAdsObject2>()
//        let appOpen3 = STAdsObject<STNativeAdsObject2>()
//        let appOpen4 = STAdsObject<STNativeAdsObject2>()
//        let appOpen5 = STAdsObject<STNativeAdsObject2>()
//        
//        var _mapTable = [String: STAdsObject<STBaseAdsObject>]()
//        _mapTable[STAdModelType.native.adName] = appOpen4
//        _mapTable[STAdModelType.admob.adName] = appOpen
//        _mapTable[STAdModelType.admobAppOpen.adName] = appOpen2
//        _mapTable[STAdModelType.admobRewarded.adName] = appOpen3
//        _mapTable[STAdModelType.admobInterstitial.adName] = appOpen5
//        
//        return _mapTable
//    }()
//    func getAdsObject(admobModel: STAdmobModel) -> STAdsObject<STAdmobProtocol>? {
//        switch admobModel.model {
//        case .admob:
//            return STNativeAdsObject()
//        default:
//            return nil
//        }
//    }
//}
